Computer systems are currently in wide use. Some such computer systems host services that are accessed by client computing systems.
Hosted services can take a wide variety of different forms. For instance, some hosted services host a suite of applications, such as an electronic mail application, a calendar application, task and contact applications, etc. The hosted services can be accessed by client components of the hosted services that reside on a client machine. For instance, a client component may surface user interface functionality that allows a user to perform calendar functions (such as to schedule appointments, etc.), email functions (such as to prepare and send e-mail messages, receive e-mail messages, manage folders in an e-mail system, manage filters, etc.), add, delete and modify contact information, among a wide variety of other things.
When the user performs these operations, the client component generates data that is synchronized to the remote server environment in which the service is deployed. Similarly, the remote server environment may need to synchronize data from its environment to the client. By way of example, if the hosted service is an electronic mail service, and the user has received new messages from other e-mail users, the service will synchronize that information down to the client computing system, the next time the user logs into the e-mail service.
Some hosted electronic mail services provide a draft roaming feature. This feature allows a user to begin drafting an e-mail message and, before the user is finished, save it as a draft. The user may then use a different device to log into the e-mail system at a later time. When the user does this, the e-mail service provides the user with access to the draft, even though the user is accessing the e-mail service through a different device than the one on which the draft was begun. Providing this type of access (through different devices) to draft e-mail messages that a user began on a different device is referred to as a draft roaming feature.
Some e-mail messages are part of a very lengthy thread, which can include a large number of other messages. Similarly, some e-mail messages have rather large attachments. A smart reply feature allows a user to reply to an e-mail message without loading the entire or full content corresponding to the e-mail message, onto the user device through which the user is accessing the service and generating the reply. By way of example, a user may receive an e-mail message that has a large attachment. The user may wish to simply forward that message to a different user, along with the attachment. A smart reply feature maintains the full e-mail message at the service (the body of the e-mail message and the associated attachment) and allows the user to generate a forwarding message, including a message body that has the text that the user inputs. When the user sends that message, the service will automatically attaches the attachment to the forwarding message, and sends it to the recipient. Thus, the user never needs to download the entire attachment in order to generate and send a reply. The same is true of a lengthy e-mail thread. That is, using a smart reply feature, the user need not download the entire e-mail thread in order to reply to or forward a message in that thread. Instead, the service maintains the full e-mail thread and receives the new content of the reply message from the user, and then attaches the full e-mail thread before sending it on to the recipient.
In addition, the synchronization mechanisms in such services often use a particular protocol in order to synchronize content between the service and client devices. When a new synchronization mechanism is deployed, it often uses a different protocol, which is incompatible with the protocol from the previous synchronization mechanism. As one example, when a first synchronization mechanism is used to synchronize data between a service and client systems, it may identify the objects that are synchronized (e.g., the e-mail messages, calendar events, contacts, etc.) using a first type of object identifying mechanism. However, a second synchronization mechanism may use a different type of object identifying mechanism in order to identify those objects. Therefore, if a service is running with the first synchronization mechanism, but wishes to change or upgrade to the second synchronization mechanism, that process often requires the service to synchronize all of the application data with the second mechanism, even though much of it has already been synchronized with the first mechanism. This can take a great deal of time, and cause disruption in the user experience.
Further, some services synchronize data between the service and a client component, upon a user logging into the service. For instance, when a user logs onto his or her e-mail service, the service may, at that time, begin synchronizing the user's inbox from the service to the client device. The synchronization mechanism can be fairly complex. For instance, it may first need to identify the differences between the inbox representations on the client system and the service. This can include enumerating all objects in the inbox of both systems and comparing them to identify items that need to be synchronized. Regardless of the particular synchronization mechanism that is used, it can be relatively computationally expensive and it can be relatively time consuming.
The discussion above is merely provided for general background information and is not intended to be used as an aid in determining the scope of the claimed subject matter.